from django.db import models
from myadmin.models import Role, Position, Admin

# Create your models here.
# 工作流模型
class Workflow(models.Model):
    name = models.CharField(max_length=50, unique=True)  # 名称，唯一
    # 存储该工作流的字段数据
    params = models.JSONField()  # 参数字段，json序列化存储（注意：Django 3.1及更高版本使用JSONField，否则您可能需要使用TextField并手动处理JSON）
    status = models.IntegerField(choices=((1, '可用'), (2, '停用')))  # 状态，1可用 2停用

    class Meta:
        db_table = 'workflow'  # 指定数据库表名
        verbose_name = '工作流'  # 可读性更好的名称

    def __str__(self):
        return self.name

# 工作流角色模型
class WorkflowRole(models.Model):
    role = models.ForeignKey(Role, on_delete=models.CASCADE)  # 角色id，外键关联角色表（注意：这里假设您有一个Role模型）
    workflow = models.ForeignKey(Workflow, on_delete=models.CASCADE)  # 工作流id，外键关联工作流表

    class Meta:
        db_table = 'workflow_role'  # 指定数据库表名
        verbose_name = '工作流角色'  # 可读性更好的名称

    def __str__(self):
        return f"{self.role.name} - {self.workflow.name}"  # 假设Role模型有一个name字段


# 工作流审批节点配置模型
class WorkflowApprovalNode(models.Model):
    workflow = models.ForeignKey(Workflow, on_delete=models.CASCADE)  # 工作流id，外键关联工作流表
    position = models.ForeignKey(Position, on_delete=models.CASCADE)  # 职位id，外键关联职位表
    level = models.IntegerField()  # 步骤

    class Meta:
        db_table = 'workflow_approval_node'  # 指定数据库表名
        verbose_name = '工作流审批节点配置'  # 可读性更好的名称

    def __str__(self):
        return f"{self.workflow_id.name} - Level {self.level}"  # 假设有一个友好的显示格式


# 任务模型
class Task(models.Model):
    name = models.CharField(max_length=30)  # 任务名称
    params = models.JSONField()  # 参数字段，json序列化存储，存储该任务的数据
    workflow = models.ForeignKey(Workflow, on_delete=models.CASCADE)  # 工作流id，外键关联工作流表
    admin = models.ForeignKey(Admin, on_delete=models.CASCADE)  # 用户id，外键关联用户表（注意：这里使用了自定义的用户模型）
    next_audit = models.ForeignKey(Admin, on_delete=models.SET_NULL, null=True,
                                   related_name='next_audit_user')  # 下一操作人id，可以为空
    task_status = models.SmallIntegerField(choices=((0, '新建'), (1, '审批中'), (2, '通过'), (3, "驳回")), default=0)  # 任务状态
    create_time = models.DateTimeField(auto_now_add=True)  # 创建时间，自动添加当前时间
    level = models.SmallIntegerField(default=0)  # 当前步骤

    class Meta:
        db_table = 'task'  # 指定数据库表名
        verbose_name = '任务'  # 可读性更好的名称

    def __str__(self):
        return self.name

# 审批记录模型
class AuditRecord(models.Model):
    task_id = models.ForeignKey(Task, on_delete=models.CASCADE)  # 任务id，外键关联任务表
    audit_user = models.ForeignKey(Admin, on_delete=models.CASCADE)  # 操作人id
    audit_time = models.DateTimeField(auto_now_add=True)  # 操作时间，自动添加当前时间
    audit_status = models.SmallIntegerField(choices={(0, "驳回"), (1, "通过")})  # 审核状态（这里可能需要定义更多的状态选项）
    note = models.CharField(max_length=100, null=True, blank=True)  # 备注

    class Meta:
        db_table = 'audit_record'  # 指定数据库表名
        verbose_name = '审批记录'  # 可读性更好的名称

    def __str__(self):
        return f"{self.task_id.name} - {self.audit_user.name} - {self.audit_time}"  # 假设有一个友好的显示格式
